package com.tzkyzj.tiremanager.service;

import com.tzkyzj.tiremanager.entity.User;
import com.tzkyzj.tiremanager.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private PasswordEncoder passwordEncoder;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User createUser(User user) {
        // 检查用户名是否已存在
        if (userRepository.findByUsername(user.getUsername()).isPresent()) {
            throw new RuntimeException("用户名已存在");
        }

        // 设置创建时间
        user.setCreatedTime(LocalDateTime.now());
        user.setUpdatedTime(LocalDateTime.now());

        // 加密密码 - 对于非admin用户进行加密
        if (!"admin".equals(user.getUsername())) {
            user.setPassword(passwordEncoder.encode(user.getPassword()));
            System.out.println("创建用户 - 密码已加密: " + user.getUsername());
        } else {
            System.out.println("创建admin用户 - 密码保持明文");
        }

        // 设置默认状态为启用
        if (user.getEnabled() == null) {
            user.setEnabled(true);
        }

        return userRepository.save(user);
    }

    /**
     * 更新用户信息，包括密码
     */
    public User updateUser(Long userId, User userUpdate) {
        Optional<User> userOptional = userRepository.findById(userId);
        if (userOptional.isPresent()) {
            User user = userOptional.get();

            // 更新运输公司和车牌号
            if (userUpdate.getTransportCompany() != null) {
                user.setTransportCompany(userUpdate.getTransportCompany());
            }
            if (userUpdate.getVehiclePlateNumber() != null) {
                user.setVehiclePlateNumber(userUpdate.getVehiclePlateNumber());
            }

            // 如果提供了新密码，则更新密码
            if (userUpdate.getPassword() != null && !userUpdate.getPassword().trim().isEmpty()) {
                // 对于非admin用户进行加密
                if (!"admin".equals(user.getUsername())) {
                    user.setPassword(passwordEncoder.encode(userUpdate.getPassword()));
                    System.out.println("更新用户密码 - 已加密: " + user.getUsername());
                } else {
                    // admin用户保持明文
                    user.setPassword(userUpdate.getPassword());
                    System.out.println("更新admin用户密码 - 保持明文");
                }
            }

            user.setUpdatedTime(LocalDateTime.now());
            return userRepository.save(user);
        } else {
            throw new RuntimeException("用户不存在");
        }
    }

    /**
     * 更新用户状态
     */
    public void updateUserStatus(Long userId, Boolean enabled) {
        Optional<User> userOptional = userRepository.findById(userId);
        if (userOptional.isPresent()) {
            User user = userOptional.get();
            user.setEnabled(enabled);
            user.setUpdatedTime(LocalDateTime.now());
            userRepository.save(user);
        } else {
            throw new RuntimeException("用户不存在");
        }
    }

    /**
     * 删除用户
     */
    public void deleteUser(Long userId) {
        Optional<User> userOptional = userRepository.findById(userId);
        if (userOptional.isPresent()) {
            User user = userOptional.get();

            // 防止删除自己（在实际使用中可能需要获取当前登录用户）
            // 这里可以添加更多的业务逻辑，比如检查是否有关联数据等

            userRepository.delete(user);
        } else {
            throw new RuntimeException("用户不存在");
        }
    }

    public Optional<User> getUserById(Long userId) {
        return userRepository.findById(userId);
    }

    /**
     * 根据用户名获取用户
     */
    public Optional<User> getUserByUsername(String username) {
        return userRepository.findByUsername(username);
    }
}